[iOS] iOSアプリでFirebase Dynamic Linksを受け取る
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、iOSアプリでFirebase Dynamic Linksを受け取るための実装を紹介します。
検証環境
- macOS High Sierra Version 10.13.5
- Xcode Version 9.4.1 (9F2000)
事前準備
Firebaseコンソールでの作業
- Firebaseコンソールを開く
- iOSアプリを作成する
- GoogleService-Info.plistファイルをダウンロードする
ローカルでの作業
Info.plistファイルを追加する
コンソールからダウンロードしたGoogleService-Info.plistファイルをXcodeプロジェクトに追加します。
Firebase SDKを追加する
CocoaPodsで追加します。
target 'FirebaseDynamicLinksSample' do pod 'Firebase/Core' pod 'Firebase/DynamicLinks' end
FirebaseApp
共有インスタンスを構成する
AppDelegate
のapplication(_:didFinishLaunchingWithOptions:)
内に処理を追加します。
import UIKit import Firebase import FirebaseDynamicLinks @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { // ... func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } }
ダイナミックリンクの作成
ドメインの追加
- Firebase コンソールのDynamic Linksのページを開く
- 「はじめる」をクリックしてサブドメインを指定し、続行をクリックする
ダイナミックリンクの作成
- Firebase コンソールのDynamic Linksのページを開く
- 「新しいダイナミックリンク」をクリックし、画面の指示に従ってダイナミックリンクを作成する
正しく構成されているかの確認
- 以下の形式のURLにアクセスする
https://<Your Subdomain>.page.link/apple-app-site-association
- 例:
https://sample.page.link/apple-app-site-association
- 例:
- jsonファイルが表示されるので
apps
の中に対象のアプリが存在することを確認する
{ "applinks": { "apps": [], "details": [{ "appID": "XXXXXXXXXX.com.example.FirebaseDynamicLinksSample", "paths": [ "NOT /_/*", "/*" ] }] } }
Dynamic Linksのハンドリング
Associated Domainsを追加する
- Xcode プロジェクト > CapabilitiesでAssociated Domainsを有効にし、以下の形式の値を追加する
applinks:<Your Subdomain>.page.link
- 例:
applinks:sample.page.link
- 例:
Dynamic Linksをハンドリングする処理を追加する
Dynamic Linksの長いURLは以下の形式になります。
https://<Your Subdomain>.page.link/?link=<DeepLinkURL>&isi=<AppStoreID>&ibi=<BundleID>
以下の実装をアプリに追加すれば、上記URLの中の<DeepLinkURL>部分を取得できます。
class AppDelegate: UIResponder, UIApplicationDelegate { // ... func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let webpageURL = userActivity.webpageURL else { return false } return DynamicLinks.dynamicLinks().handleUniversalLink(webpageURL) { dynamiclink, error in guard let url = dynamiclink!.url else { return } // ディープリンク URLを使用する処理... print("url:", url) } } }
さいごに
本記事では、iOSアプリでFirebase Dynamic Linksを受け取るための実装を紹介しました。
少し実装を追加するだけで対応できるので良いなぁと思いました。これからiOSアプリでDynamic Linksをさわってみようとしてる方の参考になれば幸いです!